package com.example.stu.task;

import com.example.stu.service.NameService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 定时任务
 * @author rabit
 */ //@Component 表示的是自动生成一个系统组件
@Component
public class ScheduledTask {

    @Autowired
    private NameService nameService;

    /**
     * 基于cron表达式的定时任务的写法 -- 推荐使用这个方法来做定时任务
     */
    @Scheduled(cron = "0/40 * * * * ?")
    public void scheduledTaskCron(){
        System.out.println("定时任务开始执行了");
        teskCode();
        System.out.println("----------定时任务方法调用结束---------------");
    }

    /**
     * 基于固定值执行的定时任务
     * fixedRate的间隔多少秒执行，他的值是毫秒
     */
    @Scheduled(fixedRate = 20*1000)
    public void scheduledTaskFixRate(){
        System.out.println("基于间隔秒的执行---fixedRate");
        teskCode();
        System.out.println("----------基于间隔秒的执行----fixedRate-----------");
    }


    /**
     * 基于固定值执行的定时任务
     * fixedDelay的间隔多少秒执行，他的值是毫秒
     */
    @Scheduled(fixedDelay = 10*1000)
    public void scheduledTaskFixDelay(){
        System.out.println("基于间隔秒的执行--fixedDelay");
        teskCode();
        System.out.println("----------基于间隔秒的执行-----fixedDelay----------");
    }


    //定时需要执行的代码，可以是多个方法，提供给定时任务方法调用！
    public void teskCode(){

        System.out.println("需要执行的代码块输出");
        //填充代码：需要从hive执行代码以后写入到mysql里面的代码逻辑
        nameService.testTask();
    }

}
